package com.shujia.flink.core

import org.apache.flink.streaming.api.scala._

object Demo1WordCount {
  def main(args: Array[String]): Unit = {
    /**
     * 1、创建flink执行环境
     */

    //流处理环境
    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //设置任务的并行度
    env.setParallelism(2)

    //设置上游发送数据到下游的时间间隔
    //设置为0就是每一条数据都会发送一次，基本没有延迟，但是吞吐量会很低
    env.setBufferTimeout(0)

    /**
     * 2、读取数据
     */
    //读取socket中的数据-- 无界流，  nc -lk 8888
    val linesDS: DataStream[String] = env.socketTextStream("master", 8888)

    /**
     * 3、处理数据
     */
    val wordsDS: DataStream[String] = linesDS.flatMap(_.split(","))

    //转换成kv格式
    val kvDS: DataStream[(String, Int)] = wordsDS.map((_, 1))

    //安装单词进行分组
    val keyByDS: KeyedStream[(String, Int), String] = kvDS.keyBy(kv => kv._1)

    //对单词求和
    //sum 需要指定一个下标
    val countDS: DataStream[(String, Int)] = keyByDS.sum(1)

    //打印结果
    countDS.print()

    /**
     * 启动flink任务
     */

    env.execute()

  }

}
